// ============================================================================
//
// LCP-net framework by Pierre CHATEL chatelp@gmail.com
// Distributed under GPLv3
// Copyright (C) THALES Land & Joint Systems, 2008, 2009. All rights reserved
//
// ============================================================================

/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package com.thalesgroup.preferenceFramework.models.LCPnet.impl;

import com.thalesgroup.preferenceFramework.models.LCPnet.CIArc;
import com.thalesgroup.preferenceFramework.models.LCPnet.CITLine;
import com.thalesgroup.preferenceFramework.models.LCPnet.CLPTLine;
import com.thalesgroup.preferenceFramework.models.LCPnet.CNodeValue;
import com.thalesgroup.preferenceFramework.models.LCPnet.COutcome;
import com.thalesgroup.preferenceFramework.models.LCPnet.Coordinate;
import com.thalesgroup.preferenceFramework.models.LCPnet.IArc;
import com.thalesgroup.preferenceFramework.models.LCPnet.LCPnet;
import com.thalesgroup.preferenceFramework.models.LCPnet.LCPnetFactory;
import com.thalesgroup.preferenceFramework.models.LCPnet.LCPnetPackage;
import com.thalesgroup.preferenceFramework.models.LCPnet.LNode;
import com.thalesgroup.preferenceFramework.models.LCPnet.LNodeValue;
import com.thalesgroup.preferenceFramework.models.LCPnet.LNodeValueUtility;
import com.thalesgroup.preferenceFramework.models.LCPnet.LTwoTuple;
import com.thalesgroup.preferenceFramework.models.LCPnet.LinguisticDomain;
import com.thalesgroup.preferenceFramework.models.LCPnet.LinguisticSubset;

import com.thalesgroup.preferenceFramework.models.LCPnet.fragments.FragmentsPackage;

import com.thalesgroup.preferenceFramework.models.LCPnet.fragments.impl.FragmentsPackageImpl;

import com.thalesgroup.preferenceFramework.models.ModelsPackage;

import com.thalesgroup.preferenceFramework.models.exceptions.ExceptionsPackage;

import com.thalesgroup.preferenceFramework.models.exceptions.impl.ExceptionsPackageImpl;

import com.thalesgroup.preferenceFramework.models.impl.ModelsPackageImpl;

import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EOperation;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;

import org.eclipse.emf.ecore.impl.EPackageImpl;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model <b>Package</b>.
 * <!-- end-user-doc -->
 * @generated
 */
public class LCPnetPackageImpl extends EPackageImpl implements LCPnetPackage {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass lcPnetEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass linguisticDomainEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass linguisticSubsetEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass lNodeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass clptEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass clptLineEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass cNodeValueEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass lNodeValueEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass lNodeValueUtilityEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass coordinateEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass cOutcomeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass lTwoTupleEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass iArcEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass ciArcEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass citEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass citLineEClass = null;

	/**
	 * Creates an instance of the model <b>Package</b>, registered with
	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
	 * package URI value.
	 * <p>Note: the correct way to create the package is via the static
	 * factory method {@link #init init()}, which also performs
	 * initialization of the package, or returns the registered package,
	 * if one already exists.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see org.eclipse.emf.ecore.EPackage.Registry
	 * @see com.thalesgroup.preferenceFramework.models.LCPnet.LCPnetPackage#eNS_URI
	 * @see #init()
	 * @generated
	 */
	private LCPnetPackageImpl() {
		super(eNS_URI, LCPnetFactory.eINSTANCE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private static boolean isInited = false;

	/**
	 * Creates, registers, and initializes the <b>Package</b> for this
	 * model, and for any others upon which it depends.  Simple
	 * dependencies are satisfied by calling this method on all
	 * dependent packages before doing anything else.  This method drives
	 * initialization for interdependent packages directly, in parallel
	 * with this package, itself.
	 * <p>Of this package and its interdependencies, all packages which
	 * have not yet been registered by their URI values are first created
	 * and registered.  The packages are then initialized in two steps:
	 * meta-model objects for all of the packages are created before any
	 * are initialized, since one package's meta-model objects may refer to
	 * those of another.
	 * <p>Invocation of this method will not affect any packages that have
	 * already been initialized.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #eNS_URI
	 * @see #createPackageContents()
	 * @see #initializePackageContents()
	 * @generated
	 */
	public static LCPnetPackage init() {
		if (isInited) return (LCPnetPackage)EPackage.Registry.INSTANCE.getEPackage(LCPnetPackage.eNS_URI);

		// Obtain or create and register package
		LCPnetPackageImpl theLCPnetPackage = (LCPnetPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof LCPnetPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new LCPnetPackageImpl());

		isInited = true;

		// Obtain or create and register interdependencies
		ModelsPackageImpl theModelsPackage = (ModelsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ModelsPackage.eNS_URI) instanceof ModelsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ModelsPackage.eNS_URI) : ModelsPackage.eINSTANCE);
		ExceptionsPackageImpl theExceptionsPackage = (ExceptionsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ExceptionsPackage.eNS_URI) instanceof ExceptionsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ExceptionsPackage.eNS_URI) : ExceptionsPackage.eINSTANCE);
		com.thalesgroup.preferenceFramework.models.LCPnet.exceptions.impl.ExceptionsPackageImpl theExceptionsPackage_1 = (com.thalesgroup.preferenceFramework.models.LCPnet.exceptions.impl.ExceptionsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(com.thalesgroup.preferenceFramework.models.LCPnet.exceptions.ExceptionsPackage.eNS_URI) instanceof com.thalesgroup.preferenceFramework.models.LCPnet.exceptions.impl.ExceptionsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(com.thalesgroup.preferenceFramework.models.LCPnet.exceptions.ExceptionsPackage.eNS_URI) : com.thalesgroup.preferenceFramework.models.LCPnet.exceptions.ExceptionsPackage.eINSTANCE);
		FragmentsPackageImpl theFragmentsPackage = (FragmentsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(FragmentsPackage.eNS_URI) instanceof FragmentsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(FragmentsPackage.eNS_URI) : FragmentsPackage.eINSTANCE);

		// Create package meta-data objects
		theLCPnetPackage.createPackageContents();
		theModelsPackage.createPackageContents();
		theExceptionsPackage.createPackageContents();
		theExceptionsPackage_1.createPackageContents();
		theFragmentsPackage.createPackageContents();

		// Initialize created meta-data
		theLCPnetPackage.initializePackageContents();
		theModelsPackage.initializePackageContents();
		theExceptionsPackage.initializePackageContents();
		theExceptionsPackage_1.initializePackageContents();
		theFragmentsPackage.initializePackageContents();

		// Mark meta-data to indicate it can't be changed
		theLCPnetPackage.freeze();

		return theLCPnetPackage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getLCPnet() {
		return lcPnetEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLCPnet_UtilityDomain() {
		return (EReference)lcPnetEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLCPnet_ValueDomains() {
		return (EReference)lcPnetEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getLinguisticDomain() {
		return linguisticDomainEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLinguisticDomain_Subsets() {
		return (EReference)linguisticDomainEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getLinguisticDomain_LowerBound() {
		return (EAttribute)linguisticDomainEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getLinguisticDomain_UpperBound() {
		return (EAttribute)linguisticDomainEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getLinguisticSubset() {
		return linguisticSubsetEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLinguisticSubset_FuzzySubset() {
		return (EReference)linguisticSubsetEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLinguisticSubset_Domain() {
		return (EReference)linguisticSubsetEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getLNode() {
		return lNodeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLNode_LinguisticTable() {
		return (EReference)lNodeEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLNode_ValueDomain() {
		return (EReference)lNodeEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getCLPT() {
		return clptEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCLPT_Lines() {
		return (EReference)clptEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCLPT_Node() {
		return (EReference)clptEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getCLPTLine() {
		return clptLineEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCLPTLine_Table() {
		return (EReference)clptLineEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCLPTLine_ParentValues() {
		return (EReference)clptLineEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCLPTLine_Utility() {
		return (EReference)clptLineEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getCNodeValue() {
		return cNodeValueEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getCNodeValue_CrispValue() {
		return (EAttribute)cNodeValueEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getLNodeValue() {
		return lNodeValueEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLNodeValue_LinguisticValue() {
		return (EReference)lNodeValueEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getLNodeValueUtility() {
		return lNodeValueUtilityEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLNodeValueUtility_NodeValue() {
		return (EReference)lNodeValueUtilityEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLNodeValueUtility_Utility() {
		return (EReference)lNodeValueUtilityEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLNodeValueUtility_Line() {
		return (EReference)lNodeValueUtilityEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getCoordinate() {
		return coordinateEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getCoordinate_X() {
		return (EAttribute)coordinateEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getCoordinate_Y() {
		return (EAttribute)coordinateEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCoordinate_LinguisticSubset() {
		return (EReference)coordinateEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getCOutcome() {
		return cOutcomeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getLTwoTuple() {
		return lTwoTupleEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getLTwoTuple_Utility() {
		return (EReference)lTwoTupleEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getLTwoTuple_Translation() {
		return (EAttribute)lTwoTupleEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getIArc() {
		return iArcEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getCIArc() {
		return ciArcEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCIArc_SelectorSet() {
		return (EReference)ciArcEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCIArc_ImportanceTable() {
		return (EReference)ciArcEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getCIT() {
		return citEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCIT_Arc() {
		return (EReference)citEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCIT_Lines() {
		return (EReference)citEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getCITLine() {
		return citLineEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCITLine_Table() {
		return (EReference)citLineEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCITLine_SelectorSetValues() {
		return (EReference)citLineEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCITLine_StartNode() {
		return (EReference)citLineEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCITLine_EndNode() {
		return (EReference)citLineEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public LCPnetFactory getLCPnetFactory() {
		return (LCPnetFactory)getEFactoryInstance();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isCreated = false;

	/**
	 * Creates the meta-model objects for the package.  This method is
	 * guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void createPackageContents() {
		if (isCreated) return;
		isCreated = true;

		// Create classes and their features
		lcPnetEClass = createEClass(LC_PNET);
		createEReference(lcPnetEClass, LC_PNET__UTILITY_DOMAIN);
		createEReference(lcPnetEClass, LC_PNET__VALUE_DOMAINS);

		linguisticDomainEClass = createEClass(LINGUISTIC_DOMAIN);
		createEReference(linguisticDomainEClass, LINGUISTIC_DOMAIN__SUBSETS);
		createEAttribute(linguisticDomainEClass, LINGUISTIC_DOMAIN__LOWER_BOUND);
		createEAttribute(linguisticDomainEClass, LINGUISTIC_DOMAIN__UPPER_BOUND);

		linguisticSubsetEClass = createEClass(LINGUISTIC_SUBSET);
		createEReference(linguisticSubsetEClass, LINGUISTIC_SUBSET__FUZZY_SUBSET);
		createEReference(linguisticSubsetEClass, LINGUISTIC_SUBSET__DOMAIN);

		lNodeEClass = createEClass(LNODE);
		createEReference(lNodeEClass, LNODE__LINGUISTIC_TABLE);
		createEReference(lNodeEClass, LNODE__VALUE_DOMAIN);

		clptEClass = createEClass(CLPT);
		createEReference(clptEClass, CLPT__LINES);
		createEReference(clptEClass, CLPT__NODE);

		clptLineEClass = createEClass(CLPT_LINE);
		createEReference(clptLineEClass, CLPT_LINE__TABLE);
		createEReference(clptLineEClass, CLPT_LINE__PARENT_VALUES);
		createEReference(clptLineEClass, CLPT_LINE__UTILITY);

		cNodeValueEClass = createEClass(CNODE_VALUE);
		createEAttribute(cNodeValueEClass, CNODE_VALUE__CRISP_VALUE);

		lNodeValueEClass = createEClass(LNODE_VALUE);
		createEReference(lNodeValueEClass, LNODE_VALUE__LINGUISTIC_VALUE);

		lNodeValueUtilityEClass = createEClass(LNODE_VALUE_UTILITY);
		createEReference(lNodeValueUtilityEClass, LNODE_VALUE_UTILITY__NODE_VALUE);
		createEReference(lNodeValueUtilityEClass, LNODE_VALUE_UTILITY__UTILITY);
		createEReference(lNodeValueUtilityEClass, LNODE_VALUE_UTILITY__LINE);

		coordinateEClass = createEClass(COORDINATE);
		createEAttribute(coordinateEClass, COORDINATE__X);
		createEAttribute(coordinateEClass, COORDINATE__Y);
		createEReference(coordinateEClass, COORDINATE__LINGUISTIC_SUBSET);

		cOutcomeEClass = createEClass(COUTCOME);

		lTwoTupleEClass = createEClass(LTWO_TUPLE);
		createEReference(lTwoTupleEClass, LTWO_TUPLE__UTILITY);
		createEAttribute(lTwoTupleEClass, LTWO_TUPLE__TRANSLATION);

		iArcEClass = createEClass(IARC);

		ciArcEClass = createEClass(CI_ARC);
		createEReference(ciArcEClass, CI_ARC__SELECTOR_SET);
		createEReference(ciArcEClass, CI_ARC__IMPORTANCE_TABLE);

		citEClass = createEClass(CIT);
		createEReference(citEClass, CIT__ARC);
		createEReference(citEClass, CIT__LINES);

		citLineEClass = createEClass(CIT_LINE);
		createEReference(citLineEClass, CIT_LINE__TABLE);
		createEReference(citLineEClass, CIT_LINE__SELECTOR_SET_VALUES);
		createEReference(citLineEClass, CIT_LINE__START_NODE);
		createEReference(citLineEClass, CIT_LINE__END_NODE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isInitialized = false;

	/**
	 * Complete the initialization of the package and its meta-model.  This
	 * method is guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void initializePackageContents() {
		if (isInitialized) return;
		isInitialized = true;

		// Initialize package
		setName(eNAME);
		setNsPrefix(eNS_PREFIX);
		setNsURI(eNS_URI);

		// Obtain other dependent packages
		com.thalesgroup.preferenceFramework.models.LCPnet.exceptions.ExceptionsPackage theExceptionsPackage_1 = (com.thalesgroup.preferenceFramework.models.LCPnet.exceptions.ExceptionsPackage)EPackage.Registry.INSTANCE.getEPackage(com.thalesgroup.preferenceFramework.models.LCPnet.exceptions.ExceptionsPackage.eNS_URI);
		FragmentsPackage theFragmentsPackage = (FragmentsPackage)EPackage.Registry.INSTANCE.getEPackage(FragmentsPackage.eNS_URI);
		ModelsPackage theModelsPackage = (ModelsPackage)EPackage.Registry.INSTANCE.getEPackage(ModelsPackage.eNS_URI);

		// Add subpackages
		getESubpackages().add(theExceptionsPackage_1);
		getESubpackages().add(theFragmentsPackage);

		// Create type parameters

		// Set bounds for type parameters

		// Add supertypes to classes
		lcPnetEClass.getESuperTypes().add(theModelsPackage.getPreferenceNetwork());
		linguisticDomainEClass.getESuperTypes().add(theModelsPackage.getNamable());
		linguisticSubsetEClass.getESuperTypes().add(theModelsPackage.getNamable());
		lNodeEClass.getESuperTypes().add(theModelsPackage.getNode());
		clptEClass.getESuperTypes().add(theModelsPackage.getNamable());
		clptLineEClass.getESuperTypes().add(theModelsPackage.getNamable());
		cNodeValueEClass.getESuperTypes().add(theModelsPackage.getNodeValue());
		lNodeValueEClass.getESuperTypes().add(theModelsPackage.getNodeValue());
		lNodeValueUtilityEClass.getESuperTypes().add(theModelsPackage.getNamable());
		cOutcomeEClass.getESuperTypes().add(theModelsPackage.getOutcome());
		lTwoTupleEClass.getESuperTypes().add(theModelsPackage.getNamable());
		iArcEClass.getESuperTypes().add(theModelsPackage.getArc());
		ciArcEClass.getESuperTypes().add(theModelsPackage.getArc());
		citEClass.getESuperTypes().add(theModelsPackage.getNamable());
		citLineEClass.getESuperTypes().add(theModelsPackage.getNamable());

		// Initialize classes and features; add operations and parameters
		initEClass(lcPnetEClass, LCPnet.class, "LCPnet", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getLCPnet_UtilityDomain(), this.getLinguisticDomain(), null, "utilityDomain", null, 1, 1, LCPnet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getLCPnet_ValueDomains(), this.getLinguisticDomain(), null, "valueDomains", null, 1, -1, LCPnet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		EOperation op = addEOperation(lcPnetEClass, ecorePackage.getEBoolean(), "isAcyclic", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEException(op, theExceptionsPackage_1.getLCPnetEvaluationException());

		op = addEOperation(lcPnetEClass, ecorePackage.getEDouble(), "getUtility", 1, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, ecorePackage.getEString(), "nodeNames", 1, -1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, ecorePackage.getEDouble(), "nodeValues", 1, -1, IS_UNIQUE, IS_ORDERED);
		addEException(op, theExceptionsPackage_1.getLCPnetEvaluationException());

		op = addEOperation(lcPnetEClass, this.getLTwoTuple(), "getLinguisticUtility", 1, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, ecorePackage.getEString(), "nodeNames", 1, -1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, this.getLTwoTuple(), "nodeValues", 1, -1, IS_UNIQUE, IS_ORDERED);
		addEException(op, theExceptionsPackage_1.getLCPnetEvaluationException());

		initEClass(linguisticDomainEClass, LinguisticDomain.class, "LinguisticDomain", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getLinguisticDomain_Subsets(), this.getLinguisticSubset(), this.getLinguisticSubset_Domain(), "subsets", null, 1, -1, LinguisticDomain.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getLinguisticDomain_LowerBound(), ecorePackage.getEDouble(), "lowerBound", "0", 1, 1, LinguisticDomain.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getLinguisticDomain_UpperBound(), ecorePackage.getEDouble(), "upperBound", "1", 1, 1, LinguisticDomain.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(linguisticSubsetEClass, LinguisticSubset.class, "LinguisticSubset", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getLinguisticSubset_FuzzySubset(), this.getCoordinate(), this.getCoordinate_LinguisticSubset(), "fuzzySubset", null, 1, 4, LinguisticSubset.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getLinguisticSubset_Domain(), this.getLinguisticDomain(), this.getLinguisticDomain_Subsets(), "domain", null, 1, 1, LinguisticSubset.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(lNodeEClass, LNode.class, "LNode", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getLNode_LinguisticTable(), this.getCLPT(), this.getCLPT_Node(), "linguisticTable", null, 1, 1, LNode.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getLNode_ValueDomain(), this.getLinguisticDomain(), null, "valueDomain", null, 1, 1, LNode.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		op = addEOperation(lNodeEClass, ecorePackage.getEDouble(), "getUtility", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, this.getCNodeValue(), "inputValues", 0, -1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, this.getCNodeValue(), "nodeValue", 1, 1, IS_UNIQUE, IS_ORDERED);
		addEException(op, theExceptionsPackage_1.getLNodeEvaluationException());

		op = addEOperation(lNodeEClass, ecorePackage.getEDouble(), "getUtility", 0, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, this.getCOutcome(), "outcome", 1, 1, IS_UNIQUE, IS_ORDERED);
		addEException(op, theExceptionsPackage_1.getLNodeEvaluationException());

		initEClass(clptEClass, com.thalesgroup.preferenceFramework.models.LCPnet.CLPT.class, "CLPT", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getCLPT_Lines(), this.getCLPTLine(), this.getCLPTLine_Table(), "lines", null, 1, -1, com.thalesgroup.preferenceFramework.models.LCPnet.CLPT.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getCLPT_Node(), this.getLNode(), this.getLNode_LinguisticTable(), "node", null, 1, 1, com.thalesgroup.preferenceFramework.models.LCPnet.CLPT.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(clptLineEClass, CLPTLine.class, "CLPTLine", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getCLPTLine_Table(), this.getCLPT(), this.getCLPT_Lines(), "table", null, 1, 1, CLPTLine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
		initEReference(getCLPTLine_ParentValues(), this.getLNodeValue(), null, "parentValues", null, 0, -1, CLPTLine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getCLPTLine_Utility(), this.getLNodeValueUtility(), this.getLNodeValueUtility_Line(), "utility", null, 1, -1, CLPTLine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(cNodeValueEClass, CNodeValue.class, "CNodeValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getCNodeValue_CrispValue(), ecorePackage.getEDouble(), "crispValue", null, 1, 1, CNodeValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(lNodeValueEClass, LNodeValue.class, "LNodeValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getLNodeValue_LinguisticValue(), this.getLinguisticSubset(), null, "linguisticValue", null, 1, 1, LNodeValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(lNodeValueUtilityEClass, LNodeValueUtility.class, "LNodeValueUtility", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getLNodeValueUtility_NodeValue(), this.getLNodeValue(), null, "nodeValue", null, 1, 1, LNodeValueUtility.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getLNodeValueUtility_Utility(), this.getLinguisticSubset(), null, "utility", null, 1, 1, LNodeValueUtility.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getLNodeValueUtility_Line(), this.getCLPTLine(), this.getCLPTLine_Utility(), "line", null, 1, 1, LNodeValueUtility.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(coordinateEClass, Coordinate.class, "Coordinate", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getCoordinate_X(), ecorePackage.getEDouble(), "x", null, 1, 1, Coordinate.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getCoordinate_Y(), ecorePackage.getEDouble(), "y", null, 1, 1, Coordinate.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getCoordinate_LinguisticSubset(), this.getLinguisticSubset(), this.getLinguisticSubset_FuzzySubset(), "linguisticSubset", null, 0, 1, Coordinate.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(cOutcomeEClass, COutcome.class, "COutcome", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		op = addEOperation(cOutcomeEClass, this.getLTwoTuple(), "getLinguisticUtility", 1, 1, IS_UNIQUE, IS_ORDERED);
		addEException(op, theExceptionsPackage_1.getLCPnetEvaluationException());

		op = addEOperation(cOutcomeEClass, ecorePackage.getEDouble(), "compareTo", 1, 1, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, this.getCOutcome(), "anotherOutcome", 1, 1, IS_UNIQUE, IS_ORDERED);
		addEException(op, theExceptionsPackage_1.getLCPnetEvaluationException());

		op = addEOperation(cOutcomeEClass, ecorePackage.getEDouble(), "getUtility", 1, 1, IS_UNIQUE, IS_ORDERED);
		addEException(op, theExceptionsPackage_1.getLCPnetEvaluationException());

		initEClass(lTwoTupleEClass, LTwoTuple.class, "LTwoTuple", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getLTwoTuple_Utility(), this.getLinguisticSubset(), null, "utility", null, 0, 1, LTwoTuple.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getLTwoTuple_Translation(), ecorePackage.getEDouble(), "translation", null, 0, 1, LTwoTuple.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(iArcEClass, IArc.class, "IArc", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(ciArcEClass, CIArc.class, "CIArc", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getCIArc_SelectorSet(), this.getLNode(), null, "selectorSet", null, 1, -1, CIArc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getCIArc_ImportanceTable(), this.getCIT(), this.getCIT_Arc(), "importanceTable", null, 1, 1, CIArc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		op = addEOperation(ciArcEClass, this.getLNode(), "getArcDirection", 2, 2, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, this.getCNodeValue(), "nodeValues", 0, -1, IS_UNIQUE, IS_ORDERED);
		addEException(op, theExceptionsPackage_1.getLCPnetEvaluationException());

		op = addEOperation(ciArcEClass, this.getLNode(), "getArcDirection", 2, 2, IS_UNIQUE, IS_ORDERED);
		addEParameter(op, this.getCOutcome(), "outcome", 1, 1, IS_UNIQUE, IS_ORDERED);
		addEException(op, theExceptionsPackage_1.getLCPnetEvaluationException());

		initEClass(citEClass, com.thalesgroup.preferenceFramework.models.LCPnet.CIT.class, "CIT", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getCIT_Arc(), this.getCIArc(), this.getCIArc_ImportanceTable(), "arc", null, 1, 1, com.thalesgroup.preferenceFramework.models.LCPnet.CIT.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getCIT_Lines(), this.getCITLine(), this.getCITLine_Table(), "lines", null, 1, -1, com.thalesgroup.preferenceFramework.models.LCPnet.CIT.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(citLineEClass, CITLine.class, "CITLine", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getCITLine_Table(), this.getCIT(), this.getCIT_Lines(), "table", null, 1, 1, CITLine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getCITLine_SelectorSetValues(), this.getLNodeValue(), null, "selectorSetValues", null, 1, -1, CITLine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getCITLine_StartNode(), this.getLNode(), null, "startNode", null, 1, 1, CITLine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getCITLine_EndNode(), this.getLNode(), null, "endNode", null, 1, 1, CITLine.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
	}

} //LCPnetPackageImpl
